# coding=utf-8

from pymongo import MongoClient
from bs4 import BeautifulSoup
import requests
import datetime
import pprint
import json
import time
import re

server_client = MongoClient('127.0.0.1', 27017)

server_db = server_client['knx_posts_db']
offical_posts_coll = server_db['offical_posts_coll']


class POST():
    def __init__(self):
        self.company = '招商银行股份有限公司'
        self.url = "http://www.hotjob.cn/wt/cmb/web/templet1000/index/corpwebPosition1000cmb!getPostListByCondition"
        self.params = {
            'positionType': 0,
            'brandCode': 1,
            'useForm': 0,
            'recruitType': 1,
            'showComp': 'true',
            'crcOrgId': 'org:100601',
            'submenu': 0
        }
        self.data = {

        }

        self.scrapy()

    def scrapy(self):
        r = requests.get(self.url, params = self.params)
        soup = BeautifulSoup(r.text)
        for a in soup.find(class_ = 'brchlist').find_all('a'):
            r = requests.get('http://www.hotjob.cn' + a['href'])
            soup = BeautifulSoup(r.text)
            if (soup.find(id = 'totalcount').get_text() == '0'):
                continue
            for page in range(1, int(soup.find(id = 'curpage').get_text().split('/')[1]) + 1):
                r = requests.get('http://www.hotjob.cn' + a['href'] + 'pc.nowPage=' + str(page - 1) + 'pc.nowPage=' + str(page))
                soup = BeautifulSoup(r.text)
                for a2 in soup.find(class_ = 'poslist').find('table').find_all('a'):
                    url = 'http://www.hotjob.cn' + a2['href']
                    name = a2.get_text()
                    date = a2.parent.parent.find_all('td')[3].get_text().strip()
                    count = a2.parent.parent.find_all('td')[5].get_text().strip()
                    r = requests.get(url)
                    soup = BeautifulSoup(r.text)
                    p = soup.find(class_ = 'c_article').find_all('p')
                    description = p[0].get_text() + p[1].get_text()
                    location = p[3].find('font').get_text()
                    item = {
                        "url": url,  # jd详情页的地址
                        'edu': '',  # 最低学历
                        'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
                        'name': name,  # 职位名称 *
                        'date': date,  # 职位发布日期，字符串形式即可，后期统一转换
                        'lang': '',  # 对语言的要求
                        'place': '',  # 办公具体地址
                        'major': '',  # 专业要求
                        'count': count,  # 招聘数量
                        'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
                        'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
                        'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
                        'funType': '',  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
                        'company': self.company,  # 企业名称
                        'location': location,  # 所在城市
                        'industry': '金融行业',  # 企业所在行业
                        'keywords': [],  # 此岗位的搜索关键字
                        'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
                        'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
                        'description': description,  # 职位的详细描述，包括职责、要求之类的
                        'subIndustry': '',  # 一律为空字符串
                        'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
                    }

                    if not offical_posts_coll.find_one({'name': item['name'], 'company': item['company'], 'location': item['location']}):
                        offical_posts_coll.insert_one(item)

                    print(item['company'], item['name'])

POST()
